// 1. es6之前没有块级作用域
if(true) {
    var foo_1 = "foo_1"
}
console.log(foo_1)

// 2. 块级作用域
// if(true) {
//     let foo_2 = "foo_2"
// }

// console.log(foo_2)

// 3. 在for 循环中变量是两层作用域
for(let i = 0;i < 3; i++) {
    let i = "foo_3"
    console.log(i)
}

// 与可拆解成下面代码
let i = 0;
if(i < 3) {
    let i = "foo_3" 
    console.log(i)
}
i++
if(i < 3) {
    let i = "foo_3" 
    console.log(i)
}
i++

if(i < 3) {
    let i = "foo_3" 
    console.log(i)
}
i++

// 4. let 不会出现变量提升
console.log(foo_4)
var foo_4 = "foo_4"

// console.log(foo_5)
// let foo_5 = "foo_5"

// 5. why 不直接在var 上增加这些特性？
// 方便原来的项目能正常运行

// const 
// let ---属性只读--->const
// 声明之后，不可修改
// 声明之时，就要赋值
const foo_6;
// foo_6 = "foo_6"

// 6. 变量最佳实践？
// 不用var; 主用const; 辅用let

